package EventLoopTest.EventLoopTutorial;

import io.netty.channel.EventLoop;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;

/**
 * EventLoop 入门示例2：执行普通任务
 * 学习目标：理解EventLoop如何执行任务
 */
public class Demo02_ExecuteTask {
    public static void main(String[] args) throws InterruptedException {
        // 创建只有1个EventLoop的组
        EventLoopGroup group = new NioEventLoopGroup(1);
        EventLoop eventLoop = group.next();
        
        System.out.println("主线程: " + Thread.currentThread().getName());
        
        // 提交任务给EventLoop执行
        System.out.println("\n=== 提交3个任务 ===");
        
        // 任务1
        eventLoop.execute(() -> {
            System.out.println("任务1执行 - 线程: " + Thread.currentThread().getName());
            try {
                Thread.sleep(1000); // 模拟耗时操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        
        // 任务2
        eventLoop.execute(() -> {
            System.out.println("任务2执行 - 线程: " + Thread.currentThread().getName());
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        
        // 任务3
        eventLoop.execute(() -> {
            System.out.println("任务3执行 - 线程: " + Thread.currentThread().getName());
        });
        
        System.out.println("主线程继续执行...");
        
        // 等待任务执行完成
        Thread.sleep(3000);
        
        // 关键观察：
        // 1. 三个任务都在同一个EventLoop线程中执行
        // 2. 任务按提交顺序执行（先进先出）
        // 3. 主线程不会被阻塞
        
        group.shutdownGracefully();
    }
}

